﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.DomainServices.Client;
using System.Windows;
using System.Windows.Controls;
using AstekServis.Web.Data;

namespace AstekServis.Views
{
    public partial class yeniServis : ChildWindow
    {
        private int _servisID = -1;
        AsTekDomainContext context = new AsTekDomainContext();
        public AracBilgi SecilenArac { get; set; }
        public int ServisID { get { return _servisID; } set { _servisID = value; } }
        Kullanici user = Session.Instance.GetValue<Kullanici>("user");
        List<ServisKontrol> _kaydedilecekKontroller = new List<ServisKontrol>();
        List<KapamaSebebi> _kapamaSebepleri;

        public yeniServis()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(yeniServis_Loaded);
            btnekle.Click += new RoutedEventHandler(btnekle_Click);
            btnCikar.Click += new RoutedEventHandler(btnCikar_Click);
        }

        void btnCikar_Click(object sender, RoutedEventArgs e)
        {
            if (lstEklenenler.SelectedItem != null)
                lstEklenenler.Items.Remove(lstEklenenler.SelectedItem);
        }

        void btnekle_Click(object sender, RoutedEventArgs e)
        {
            if (lstSorunlar.SelectedItem != null)
            {
                bool var = false;
                foreach (ServisSorunTanimi tn in lstEklenenler.Items)
                {
                    if (tn.SorunTanimi == ((ServisSorunTanimi)lstSorunlar.SelectedItem).SorunTanimi)
                        var = true;
                }
                if (!var)
                    lstEklenenler.Items.Add(lstSorunlar.SelectedItem);
            }
        }

        void yeniServis_Loaded(object sender, RoutedEventArgs e)
        {
            lblHeader.Content = "";
            dteBaslamaTarihi.SelectedDate = DateTime.Now;
            dteBitisTarihi.SelectedDate = DateTime.Now;
            dteGelisTarihi.SelectedDate = DateTime.Now;
            dteGidisTarihi.SelectedDate = DateTime.Now;

            tmrBaslama.Value = DateTime.Now;
            tmrBitis.Value = DateTime.Now;
            tmrGelis.Value = DateTime.Now;
            tmrGidis.Value = DateTime.Now;

            TeknisyenListesi();
        }

        private void TeknisyenListesi()
        {
            EntityQuery<Teknisyen> qry = context.GetTeknisyenlerQuery().OrderBy(x => x.Adi);
            LoadOperation<Teknisyen> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Teknisyen> op = ss as LoadOperation<Teknisyen>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<Teknisyen> teknisyenler = op.Entities.Select(x => new Teknisyen { Adi = x.Adi, AmirID = x.AmirID, ID = x.ID }).ToList();
                    cmbTeknisyen1.DisplayMemberPath = "Adi";
                    cmbTeknisyen2.DisplayMemberPath = "Adi";
                    cmbTeknisyen3.DisplayMemberPath = "Adi";

                    Teknisyen tr = new Teknisyen();
                    tr.ID = -1;
                    tr.AmirID = -1;
                    tr.Adi = " ";
                    cmbTeknisyen1.Items.Add(tr);
                    cmbTeknisyen2.Items.Add(tr);
                    cmbTeknisyen3.Items.Add(tr);

                    foreach (Teknisyen tk in teknisyenler)
                    {
                        cmbTeknisyen1.Items.Add(tk);
                        cmbTeknisyen2.Items.Add(tk);
                        cmbTeknisyen3.Items.Add(tk);
                    }

                    if (cmbTeknisyen1.Items.Count > 0)
                        cmbTeknisyen1.SelectedIndex = 0;

                    if (cmbTeknisyen2.Items.Count > 0)
                        cmbTeknisyen2.SelectedIndex = 0;

                    if (cmbTeknisyen3.Items.Count > 0)
                        cmbTeknisyen3.SelectedIndex = 0;

                    SorunListesi();
                }
            };
        }

        private void ServisKontrolleriListesi()
        {
            EntityQuery<ServisKontrolTanimi> qry = context.GetServisKontrolTanimlariQuery().OrderBy(x => x.KontrolAdi);
            LoadOperation<ServisKontrolTanimi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisKontrolTanimi> op = ss as LoadOperation<ServisKontrolTanimi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisKontrolTanimi> kontroller = op.Entities.Select(x => new ServisKontrolTanimi { ID = x.ID, KontrolAdi = x.KontrolAdi }).ToList();
                    StackPanel panel;
                    TextBlock txt;
                    ComboBox cmb;
                    lstKontroller.Orientation = Orientation.Vertical;
                    foreach (var item in kontroller)
                    {
                        panel = new StackPanel();
                        panel.Tag = item.ID;
                        panel.Orientation = Orientation.Horizontal;
                        panel.Height = 30;
                        txt = new TextBlock();
                        txt.Width = 300;
                        txt.Text = item.KontrolAdi;
                        txt.Margin = new Thickness(1, 1, 1, 1);
                        txt.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
                        txt.VerticalAlignment = System.Windows.VerticalAlignment.Center;

                        cmb = new ComboBox();
                        cmb.Tag = item;
                        cmb.SelectionChanged += (s, o) =>
                        {
                            if (((ComboBox)s).SelectedIndex > -1)
                            {
                                ServisKontrolTanimi tnm = (ServisKontrolTanimi)((ComboBox)s).Tag;
                                var kontrol = _kaydedilecekKontroller.Where(x => x.KontrolID == tnm.ID).FirstOrDefault();
                                if (kontrol != null)
                                {
                                    kontrol.Deger = (byte)((ComboBox)s).SelectedIndex;
                                }
                                else
                                {
                                    _kaydedilecekKontroller.Add(new ServisKontrol()
                                    {
                                        Deger = (byte)((ComboBox)s).SelectedIndex,
                                        KontrolID = tnm.ID,
                                        HareketID = -1
                                    });
                                }
                            }
                        };
                        cmb.Items.Add("Evet");
                        cmb.Items.Add("Hayır");
                        cmb.SelectedIndex = 1;
                        cmb.Width = 70;
                        cmb.Margin = new Thickness(1, 1, 1, 1);
                        cmb.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
                        cmb.VerticalAlignment = System.Windows.VerticalAlignment.Center;

                        panel.Children.Add(txt);
                        panel.Children.Add(cmb);

                        lstKontroller.Children.Add(panel);
                    }
                    ServisYerleriListesi();
                }
            };
        }

        private void SorunListesi()
        {
            EntityQuery<ServisSorunTanimi> qry = context.GetServisSorunTanimlariQuery().Where(x => x.Tip == 0).OrderBy(x => x.SorunTanimi);
            LoadOperation<ServisSorunTanimi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisSorunTanimi> op = ss as LoadOperation<ServisSorunTanimi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisSorunTanimi> tanimlar = op.Entities.Select(x => new ServisSorunTanimi { ID = x.ID, SorunTanimi = x.SorunTanimi }).ToList();
                    lstSorunlar.DisplayMemberPath = "SorunTanimi";
                    lstEklenenler.DisplayMemberPath = "SorunTanimi";
                    foreach (ServisSorunTanimi item in tanimlar)
                    {
                        lstSorunlar.Items.Add(item);
                    }

                    ServisKontrolleriListesi();
                }
            };
        }

        private void KapamaSebepleriListesi()
        {
            EntityQuery<KapamaSebebi> qry = context.GetKapamaSebepleriQuery().OrderBy(x => x.Adi);
            LoadOperation<KapamaSebebi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<KapamaSebebi> op = ss as LoadOperation<KapamaSebebi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    _kapamaSebepleri = op.Entities.Select(x => new KapamaSebebi { Adi = x.Adi, ID = x.ID }).ToList();
                    LoadHareket();
                }
            };
        }

        private void ServisYerleriListesi()
        {
            EntityQuery<ServisMerkezi> qry = context.GetServisMerkezleriQuery().OrderBy(x => x.Adi);
            LoadOperation<ServisMerkezi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisMerkezi> op = ss as LoadOperation<ServisMerkezi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisMerkezi> tanimlar = op.Entities.Select(x => new ServisMerkezi { ID = x.ID, Adi = x.Adi }).ToList();
                    cmbServis.DisplayMemberPath = "Adi";
                    foreach (ServisMerkezi item in tanimlar)
                    {
                        cmbServis.Items.Add(item);
                    }
                    KapamaSebepleriListesi();
                }
            };
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            if (txtMusteri.Text.Length < 5 || txtMusteriTelefon.Text.Length < 5)
            {
                MessageBox.Show("Müşteri adı ve telefonu 5 haneden fazla girilmeli !");
                return;
            }

            if (tabControl1 != null)
            {
                if (tabControl1.SelectedIndex == 0)
                {
                    tabControl1.SelectedIndex = 1;
                }
                else
                {
                    if (!string.IsNullOrEmpty(txtMusteri.Text))
                    {
                        ServisKayit();
                        this.DialogResult = true;
                    }
                    else
                    {
                        MessageBox.Show("Lütfen tüm bilgileri eksiksiz girin !");
                    }
                }
            }
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (tabControl1 != null)
            {
                if (tabControl1.SelectedIndex == 1)
                {
                    btnNext.Content = "Kaydet";
                }
                else
                {
                    btnNext.Content = "Sonraki";
                }
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            AracListesi liste = new AracListesi();
            liste.Filtre = txtArac.Text;
            liste.ListeTipi = AracListesi.ListeTipleri.Arac;
            liste.Show();
            liste.Closed += (s, o) =>
                {
                    AracListesi frm = (AracListesi)s;
                    if (frm.DialogResult.HasValue && frm.DialogResult.Value)
                    {
                        SecilenArac = frm.SecilenArac;
                        txtFirma.Text = SecilenArac.FirmaAdi;
                        txtGrup.Text = SecilenArac.GrupAdi;
                        txtArac.Text = SecilenArac.AracKodu;
                        txtPlaka.Text = SecilenArac.Plaka;
                        txtSistem.Text = SecilenArac.SistemAdi;
                        txtMontajTarihi.Text = SecilenArac.MontajTarihi.ToShortDateString();
                        new Methods().garantiSozlemesiBul(SecilenArac.ID, lblHeader, SecilenArac.MontajTarihi);
                    }
                };
        }


        private void AracBul2(string sistemno)
        {
            EntityQuery<Arac> qry = context.GetAraclarQuery().Where(x => x.SistemNo == sistemno);
            LoadOperation<Arac> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Arac> op = ss as LoadOperation<Arac>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    Arac arac = op.Entities.FirstOrDefault();
                    if (arac != null)
                    {
                        AracBul(arac.Plaka);
                    }
                }
            };
        }

        public void AracBul(string plaka)
        {
            EntityQuery<AracBilgi> qry = context.GetAracBilgileriQuery().Where(x => x.Plaka.StartsWith(plaka));
            LoadOperation<AracBilgi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracBilgi> op = ss as LoadOperation<AracBilgi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracBilgi arac = op.Entities.FirstOrDefault();
                    if (arac != null)
                    {
                        SecilenArac = arac;
                        txtFirma.Text = arac.FirmaAdi;
                        txtGrup.Text = arac.GrupAdi;
                        txtArac.Text = arac.AracKodu;
                        txtPlaka.Text = arac.Plaka;
                        txtSistem.Text = arac.SistemAdi;
                        txtMontajTarihi.Text = arac.MontajTarihi.ToShortDateString();
                        new Methods().garantiSozlemesiBul(arac.ID, lblHeader, arac.MontajTarihi);
                    }
                    else
                    {
                        AracBul2(plaka);
                    }
                }
            };
        }

        //private void ServisKayit()
        //{
        //    LoadOperation<AracHareketi> operation = context.Load(context.GetAracHareketleriQuery().Where(x => x.ID == ServisID));
        //    operation.Completed += (ss, oo) =>
        //    {
        //        LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
        //        if (op.HasError)
        //        {
        //            System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
        //            System.Windows.MessageBoxButton.OK);
        //            op.MarkErrorAsHandled();
        //        }
        //        else
        //        {
        //            AracHareketi arc = op.Entities.FirstOrDefault();
        //            if (arc != null)
        //            {
        //                arc.MusteriAdi = txtMusteri.Text;
        //                arc.MusteriTelefon = txtMusteriTelefon.Text;
        //                arc.AracGelisTarihi = new DateTime(dteGelisTarihi.SelectedDate.Value.Year, dteGelisTarihi.SelectedDate.Value.Month, dteGelisTarihi.SelectedDate.Value.Day, tmrGelis.Value.Value.Hour, tmrGelis.Value.Value.Minute, 0);
        //                arc.AracHareketTarihi = new DateTime(dteGidisTarihi.SelectedDate.Value.Year, dteGidisTarihi.SelectedDate.Value.Month, dteGidisTarihi.SelectedDate.Value.Day, tmrGidis.Value.Value.Hour, tmrGidis.Value.Value.Minute, 0);
        //                arc.ServiseGidilecekTarih = new DateTime(dteBaslamaTarihi.SelectedDate.Value.Year, dteBaslamaTarihi.SelectedDate.Value.Month, dteBaslamaTarihi.SelectedDate.Value.Day, tmrBaslama.Value.Value.Hour, tmrBaslama.Value.Value.Minute, 0);
        //                arc.MontajSefiTarihi = new DateTime(dteBitisTarihi.SelectedDate.Value.Year, dteBitisTarihi.SelectedDate.Value.Month, dteBitisTarihi.SelectedDate.Value.Day, tmrBitis.Value.Value.Hour, tmrBitis.Value.Value.Minute, 0);

        //                if (cmbTeknisyen1.SelectedIndex > -1)
        //                {
        //                    arc.TeknisyenID1 = ((Teknisyen)cmbTeknisyen1.SelectedItem).ID;
        //                }
        //                else
        //                {
        //                    arc.TeknisyenID1 = -1;
        //                }

        //                if (cmbTeknisyen2.SelectedIndex > -1)
        //                {
        //                    arc.TeknisyenID2 = ((Teknisyen)cmbTeknisyen2.SelectedItem).ID;
        //                }
        //                else
        //                    arc.TeknisyenID2 = -1;

        //                if (cmbTeknisyen3.SelectedIndex > -1)
        //                {
        //                    arc.TeknisyenID3 = ((Teknisyen)cmbTeknisyen3.SelectedItem).ID;
        //                }
        //                else
        //                    arc.TeknisyenID3 = -1;

        //                if (cmbServis.SelectedIndex > -1)
        //                {
        //                    arc.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
        //                }
        //                else
        //                    arc.ServisMerkezID = -1;


        //                arc.Notlar = txtNot.Text.Check();
        //                arc.HizmetYeri = txtHizmetYeri.Text.Check();

        //                context.SubmitChanges(so =>
        //                {
        //                    if (so.HasError)
        //                        MessageBox.Show("Hata:\r\n" + so.Error.Message);
        //                    else
        //                    {
        //                        SaveServisKontrol(arc.ID);
        //                    }
        //                }, null);
        //            }
        //            else
        //            {
        //                AracHareketi hr = new AracHareketi();
        //                hr.OlusturanKullanici = user.ID;
        //                hr.OlusturulmaTarihi = DateTime.Now;
        //                hr.KapanmaTarihi = new DateTime(1900, 1, 1);
        //                hr.KapatanKullanici = -1;
        //                hr.Durum = 0;
        //                hr.EvrakTip = 1;
        //                hr.FaturaID = 0;
        //                hr.AracID = SecilenArac.ID;
        //                hr.Tarih = DateTime.Now;
        //                hr.MusteriAdi = txtMusteri.Text;
        //                hr.MusteriTelefon = txtMusteriTelefon.Text;
        //                hr.AracGelisTarihi = new DateTime(dteGelisTarihi.SelectedDate.Value.Year, dteGelisTarihi.SelectedDate.Value.Month, dteGelisTarihi.SelectedDate.Value.Day, tmrGelis.Value.Value.Hour, tmrGelis.Value.Value.Minute, 0);
        //                hr.AracHareketTarihi = new DateTime(dteGidisTarihi.SelectedDate.Value.Year, dteGidisTarihi.SelectedDate.Value.Month, dteGidisTarihi.SelectedDate.Value.Day, tmrGidis.Value.Value.Hour, tmrGidis.Value.Value.Minute, 0);
        //                hr.ServiseGidilecekTarih = new DateTime(dteBaslamaTarihi.SelectedDate.Value.Year, dteBaslamaTarihi.SelectedDate.Value.Month, dteBaslamaTarihi.SelectedDate.Value.Day, tmrBaslama.Value.Value.Hour, tmrBaslama.Value.Value.Minute, 0);
        //                hr.MontajSefiTarihi = new DateTime(dteBitisTarihi.SelectedDate.Value.Year, dteBitisTarihi.SelectedDate.Value.Month, dteBitisTarihi.SelectedDate.Value.Day, tmrBitis.Value.Value.Hour, tmrBitis.Value.Value.Minute, 0);
        //                hr.HizmetYeri = txtHizmetYeri.Text.Check();
        //                hr.Notlar = txtNot.Text.Check();
        //                hr.ServisBelgeNo = "A";

        //                if (cmbServis.SelectedIndex > -1)
        //                    hr.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
        //                else
        //                    hr.ServisMerkezID = -1;

        //                if (cmbTeknisyen1.SelectedIndex > -1)
        //                    hr.TeknisyenID1 = ((Teknisyen)cmbTeknisyen1.SelectedItem).ID;
        //                else
        //                    hr.TeknisyenID1 = -1;

        //                if (cmbTeknisyen2.SelectedIndex > -1)
        //                    hr.TeknisyenID2 = ((Teknisyen)cmbTeknisyen2.SelectedItem).ID;
        //                else
        //                    hr.TeknisyenID2 = -1;

        //                if (cmbTeknisyen3.SelectedIndex > -1)
        //                    hr.TeknisyenID3 = ((Teknisyen)cmbTeknisyen3.SelectedItem).ID;
        //                else
        //                    hr.TeknisyenID3 = -1;

        //                hr.TeknisyenID4 = -1;
        //                hr.TeknisyenID5 = -1;
        //                hr.TeknisyenID6 = -1;
        //                hr.TeknisyenID7 = -1;
        //                hr.TeknisyenID8 = -1;
        //                hr.TeknisyenID9 = -1;
        //                hr.TeknisyenID10 = -1;

        //                hr.TeslimAlan = "A";
        //                context.AracHareketis.Add(hr);

        //                context.SubmitChanges(so =>
        //                {
        //                    if (so.HasError)
        //                        MessageBox.Show("Hata:\r\n" + so.Error.Message);
        //                    else
        //                    {
        //                        if (so.ChangeSet.AddedEntities.Count > 0)
        //                        {
        //                            SaveServisKontrol(((AracHareketi)so.ChangeSet.AddedEntities[0]).ID);
        //                        }
        //                    }
        //                }, null);
        //            }
        //        }
        //    };
        //}

        private void ServisKayit()
        {
            LoadOperation<AracHareketi> operation = context.Load(context.GetAracHareketleriQuery().Where(x => x.ID == ServisID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracHareketi arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        arc.MusteriAdi = txtMusteri.Text;
                        arc.MusteriTelefon = txtMusteriTelefon.Text;
                        arc.AracGelisTarihi = new DateTime(dteGelisTarihi.SelectedDate.Value.Year, dteGelisTarihi.SelectedDate.Value.Month, dteGelisTarihi.SelectedDate.Value.Day, tmrGelis.Value.Value.Hour, tmrGelis.Value.Value.Minute, 0);
                        arc.AracHareketTarihi = new DateTime(dteGidisTarihi.SelectedDate.Value.Year, dteGidisTarihi.SelectedDate.Value.Month, dteGidisTarihi.SelectedDate.Value.Day, tmrGidis.Value.Value.Hour, tmrGidis.Value.Value.Minute, 0);
                        arc.ServiseGidilecekTarih = new DateTime(dteBaslamaTarihi.SelectedDate.Value.Year, dteBaslamaTarihi.SelectedDate.Value.Month, dteBaslamaTarihi.SelectedDate.Value.Day, tmrBaslama.Value.Value.Hour, tmrBaslama.Value.Value.Minute, 0);
                        arc.MontajSefiTarihi = new DateTime(dteBitisTarihi.SelectedDate.Value.Year, dteBitisTarihi.SelectedDate.Value.Month, dteBitisTarihi.SelectedDate.Value.Day, tmrBitis.Value.Value.Hour, tmrBitis.Value.Value.Minute, 0);

                        if (cmbTeknisyen1.SelectedIndex > -1)
                        {
                            arc.TeknisyenID1 = ((Teknisyen)cmbTeknisyen1.SelectedItem).ID;
                        }
                        else
                        {
                            arc.TeknisyenID1 = -1;
                        }

                        if (cmbTeknisyen2.SelectedIndex > -1)
                        {
                            arc.TeknisyenID2 = ((Teknisyen)cmbTeknisyen2.SelectedItem).ID;
                        }
                        else
                            arc.TeknisyenID2 = -1;

                        if (cmbTeknisyen3.SelectedIndex > -1)
                        {
                            arc.TeknisyenID3 = ((Teknisyen)cmbTeknisyen3.SelectedItem).ID;
                        }
                        else
                            arc.TeknisyenID3 = -1;

                        if (cmbServis.SelectedIndex > -1)
                        {
                            arc.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
                        }
                        else
                            arc.ServisMerkezID = -1;


                        arc.Notlar = txtNot.Text.Check();
                        arc.HizmetYeri = txtHizmetYeri.Text.Check();
                        arc.DbNo = user.DbNo;

                        context.SubmitChanges(so =>
                        {
                            if (so.HasError)
                                MessageBox.Show("Hata:\r\n" + so.Error.Message);
                            else
                            {
                                SaveServisKontrol(arc.ID);
                            }
                        }, null);
                    }
                    else
                    {
                        AracHareketi hr = new AracHareketi();
                        hr.OlusturanKullanici = user.ID;
                        hr.OlusturulmaTarihi = DateTime.Now;
                        hr.KapanmaTarihi = new DateTime(1900, 1, 1);
                        hr.KapatanKullanici = -1;
                        hr.Durum = 0;
                        hr.EvrakTip = 1;
                        hr.FaturaID = 0;
                        hr.AracID = SecilenArac.ID;
                        hr.Tarih = DateTime.Now;
                        hr.MusteriAdi = txtMusteri.Text;
                        hr.MusteriTelefon = txtMusteriTelefon.Text;
                        hr.AracGelisTarihi = new DateTime(dteGelisTarihi.SelectedDate.Value.Year, dteGelisTarihi.SelectedDate.Value.Month, dteGelisTarihi.SelectedDate.Value.Day, tmrGelis.Value.Value.Hour, tmrGelis.Value.Value.Minute, 0);
                        hr.AracHareketTarihi = new DateTime(dteGidisTarihi.SelectedDate.Value.Year, dteGidisTarihi.SelectedDate.Value.Month, dteGidisTarihi.SelectedDate.Value.Day, tmrGidis.Value.Value.Hour, tmrGidis.Value.Value.Minute, 0);
                        hr.ServiseGidilecekTarih = new DateTime(dteBaslamaTarihi.SelectedDate.Value.Year, dteBaslamaTarihi.SelectedDate.Value.Month, dteBaslamaTarihi.SelectedDate.Value.Day, tmrBaslama.Value.Value.Hour, tmrBaslama.Value.Value.Minute, 0);
                        hr.MontajSefiTarihi = new DateTime(dteBitisTarihi.SelectedDate.Value.Year, dteBitisTarihi.SelectedDate.Value.Month, dteBitisTarihi.SelectedDate.Value.Day, tmrBitis.Value.Value.Hour, tmrBitis.Value.Value.Minute, 0);
                        hr.HizmetYeri = txtHizmetYeri.Text.Check();
                        hr.Notlar = txtNot.Text.Check();
                        hr.ServisBelgeNo = "A";
                        hr.DbNo = user.DbNo;

                        if (cmbServis.SelectedIndex > -1)
                            hr.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
                        else
                            hr.ServisMerkezID = -1;

                        if (cmbTeknisyen1.SelectedIndex > -1)
                            hr.TeknisyenID1 = ((Teknisyen)cmbTeknisyen1.SelectedItem).ID;
                        else
                            hr.TeknisyenID1 = -1;

                        if (cmbTeknisyen2.SelectedIndex > -1)
                            hr.TeknisyenID2 = ((Teknisyen)cmbTeknisyen2.SelectedItem).ID;
                        else
                            hr.TeknisyenID2 = -1;

                        if (cmbTeknisyen3.SelectedIndex > -1)
                            hr.TeknisyenID3 = ((Teknisyen)cmbTeknisyen3.SelectedItem).ID;
                        else
                            hr.TeknisyenID3 = -1;

                        hr.TeknisyenID4 = -1;
                        hr.TeknisyenID5 = -1;
                        hr.TeknisyenID6 = -1;
                        hr.TeknisyenID7 = -1;
                        hr.TeknisyenID8 = -1;
                        hr.TeknisyenID9 = -1;
                        hr.TeknisyenID10 = -1;

                        hr.TeslimAlan = "A";
                        context.AracHareketis.Add(hr);

                        context.SubmitChanges(so =>
                        {
                            if (so.HasError)
                                MessageBox.Show("Hata:\r\n" + so.Error.Message);
                            else
                            {
                                if (so.ChangeSet.AddedEntities.Count > 0)
                                {
                                    SaveServisKontrol(((AracHareketi)so.ChangeSet.AddedEntities[0]).ID);
                                }
                            }
                        }, null);
                    }
                }
            };
        }

        private void SaveServisKontrol(int servisID)
        {
            LoadOperation<ServisKontrol> operation = context.Load(context.GetServisKontrolleriQuery().Where(x => x.HareketID == servisID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisKontrol> op = ss as LoadOperation<ServisKontrol>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisKontrol> lst = op.Entities.ToList();
                    foreach (var item in lst)
                    {
                        context.ServisKontrols.Remove(item);
                    }
                    context.SubmitChanges(so =>
                    {
                        if (so.HasError)
                            MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        else
                        {
                            foreach (var item in _kaydedilecekKontroller)
                            {
                                item.HareketID = servisID;
                                context.ServisKontrols.Add(item);
                            }
                            context.SubmitChanges(sos =>
                                {
                                    if (sos.HasError)
                                        MessageBox.Show("Hata:\r\n" + sos.Error.Message);
                                    else
                                    {
                                        SaveServisSorun(servisID);
                                    }
                                }, null);
                        }
                    }, null);
                }
            };
        }

        private void SaveServisSorun(int servisID)
        {
            LoadOperation<ServisSorunu> operation = context.Load(context.GetServisSorunlariQuery().Where(x => x.HareketID == servisID && x.Tip == 0));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisSorunu> op = ss as LoadOperation<ServisSorunu>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisSorunu> lst = op.Entities.ToList();
                    foreach (var item in lst)
                    {
                        context.ServisSorunus.Remove(item);
                    }
                    context.SubmitChanges(so =>
                    {
                        if (so.HasError)
                            MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        else
                        {
                            foreach (var item in lstEklenenler.Items)
                            {
                                ServisSorunTanimi tnm = (ServisSorunTanimi)item;
                                context.ServisSorunus.Add(new ServisSorunu()
                                {
                                    Deger = 0,
                                    HareketID = servisID,
                                    SorunID = tnm.ID,
                                    Tip = 0
                                });
                            }
                            context.SubmitChanges(sos =>
                            {
                                if (sos.HasError)
                                    MessageBox.Show("Hata:\r\n" + sos.Error.Message);
                            }, null);
                        }
                    }, null);
                }
            };
        }
        private void FindControlBySetValue(int kontrolTanimID, int value)
        {
            foreach (var q in lstKontroller.Children)
            {
                if (q.GetType() == typeof(StackPanel))
                {
                    StackPanel st = q as StackPanel;
                    if (st.Tag != null && (int)st.Tag == kontrolTanimID)
                    {
                        foreach (var c in st.Children)
                        {
                            if (c.GetType() == typeof(ComboBox))
                            {
                                ComboBox cmb = c as ComboBox;
                                cmb.SelectedIndex = value;
                                break;
                            }
                        }
                        break;
                    }
                }
            }
        }

        private void LoadArac(int aracID)
        {
            EntityQuery<AracBilgi> qry = context.GetAracBilgileriQuery().Where(x => x.ID == aracID);
            LoadOperation<AracBilgi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracBilgi> op = ss as LoadOperation<AracBilgi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracBilgi bilgi = op.Entities.FirstOrDefault();
                    if (bilgi != null)
                    {
                        SecilenArac = bilgi;
                        txtFirma.Text = SecilenArac.FirmaAdi;
                        txtGrup.Text = SecilenArac.GrupAdi;
                        txtArac.Text = SecilenArac.AracKodu;
                        txtPlaka.Text = SecilenArac.Plaka;
                        txtSistem.Text = SecilenArac.SistemAdi;
                        txtMontajTarihi.Text = SecilenArac.MontajTarihi.ToShortDateString();
                        new Methods().garantiSozlemesiBul(bilgi.ID, lblHeader, SecilenArac.MontajTarihi);
                    }
                }
            };
        }
        private void LoadHareket()
        {
            if (ServisID > -1)
            {
                EntityQuery<AracHareketi> qry = context.GetAracHareketleriQuery().Where(x => x.ID == ServisID);
                LoadOperation<AracHareketi> operation = context.Load(qry);
                operation.Completed += (ss, oo) =>
                {
                    LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
                    if (op.HasError)
                    {
                        System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                        System.Windows.MessageBoxButton.OK);
                        op.MarkErrorAsHandled();
                    }
                    else
                    {
                        AracHareketi arc = op.Entities.FirstOrDefault();
                        if (arc != null)
                        {
                            txtMusteri.Text = arc.MusteriAdi;
                            txtMusteriTelefon.Text = arc.MusteriTelefon;

                            if (arc.TeknisyenID1 > -1)
                            {
                                for (int i = 0; i < cmbTeknisyen1.Items.Count; i++)
                                {
                                    if (((Teknisyen)cmbTeknisyen1.Items[i]).ID == arc.TeknisyenID1)
                                    {
                                        cmbTeknisyen1.SelectedIndex = i;
                                        break;
                                    }
                                }
                            }

                            if (arc.TeknisyenID2 > -1)
                            {
                                for (int i = 0; i < cmbTeknisyen2.Items.Count; i++)
                                {
                                    if (((Teknisyen)cmbTeknisyen2.Items[i]).ID == arc.TeknisyenID2)
                                    {
                                        cmbTeknisyen2.SelectedIndex = i;
                                        break;
                                    }
                                }
                            }

                            if (arc.TeknisyenID3 > -1)
                            {
                                for (int i = 0; i < cmbTeknisyen3.Items.Count; i++)
                                {
                                    if (((Teknisyen)cmbTeknisyen3.Items[i]).ID == arc.TeknisyenID3)
                                    {
                                        cmbTeknisyen3.SelectedIndex = i;
                                        break;
                                    }
                                }
                            }

                            if (arc.ServisMerkezID > -1)
                            {
                                for (int i = 0; i < cmbServis.Items.Count; i++)
                                {
                                    if (((ServisMerkezi)cmbServis.Items[i]).ID == arc.ServisMerkezID)
                                    {
                                        cmbServis.SelectedIndex = i;
                                        break;
                                    }
                                }
                            }

                            if (_kapamaSebepleri != null)
                            {
                                if (arc.KapamaNedeniID > -1)
                                {
                                    var kpm = _kapamaSebepleri.Where(x => x.ID == arc.KapamaNedeniID).FirstOrDefault();
                                    if (kpm != null)
                                        txtKapamaNedeni.Text = kpm.Adi;
                                }
                            }

                            dteBaslamaTarihi.SelectedDate = arc.ServiseGidilecekTarih;
                            dteBitisTarihi.SelectedDate = arc.MontajSefiTarihi;
                            dteGelisTarihi.SelectedDate = arc.AracGelisTarihi;
                            dteGidisTarihi.SelectedDate = arc.AracHareketTarihi;

                            tmrBaslama.Value = arc.ServiseGidilecekTarih;
                            tmrBitis.Value = arc.MontajSefiTarihi;
                            tmrGelis.Value = arc.AracGelisTarihi;
                            tmrGidis.Value = arc.AracHareketTarihi;

                            txtHizmetYeri.Text = arc.HizmetYeri;
                            txtNot.Text = arc.Notlar;

                            LoadArac(arc.AracID);
                            LoadSorunlar(arc.ID);
                            LoadKontroller(arc.ID);

                            InvokeOperation<ServisDetaylari[]> ops = context.GetServisBilgileri(arc.ID, 0);
                            ops.Completed += (sss, ooo) =>
                            {
                                InvokeOperation<ServisDetaylari[]> son = sss as InvokeOperation<ServisDetaylari[]>;
                                if (son.HasError)
                                {
                                    System.Windows.MessageBox.Show(son.Error.ToString(), "Load Error",
                                    System.Windows.MessageBoxButton.OK);
                                    son.MarkErrorAsHandled();
                                }
                                else
                                {
                                    if (son != null)
                                    {
                                        grdDetaylar.AddColumn("Tarih");
                                        grdDetaylar.AddColumn("EvrakCinsi");
                                        grdDetaylar.AddColumn("EvrakSeri");
                                        grdDetaylar.AddColumn("EvrakSira");
                                        grdDetaylar.AddColumn("ParcaAdi");
                                        grdDetaylar.AddColumn("Tutar");
                                        grdDetaylar.AddColumn("Firma");
                                        grdDetaylar.DataSource = son.Value;
                                    }
                                }
                            };
                        }
                    }
                };
            }
        }

        private void LoadSorunlar(int hareketID)
        {
            EntityQuery<ServisSorunu> qry = context.GetServisSorunlariQuery().Where(x => x.HareketID == hareketID);
            LoadOperation<ServisSorunu> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisSorunu> op = ss as LoadOperation<ServisSorunu>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisSorunu> bilgi = op.Entities.ToList();
                    foreach (ServisSorunu sorun in bilgi)
                    {
                        if (sorun.Tip == 0)
                        {
                            foreach (var item in lstSorunlar.Items)
                            {
                                ServisSorunTanimi tnm = (ServisSorunTanimi)item;
                                if (tnm.ID == sorun.SorunID)
                                {
                                    lstEklenenler.Items.Add(tnm);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            foreach (var item in lstSorunlar.Items)
                            {
                                ServisSorunTanimi tnm = (ServisSorunTanimi)item;
                                if (tnm.ID == sorun.SorunID)
                                {
                                    lstTespitedilenler.Items.Add(tnm.SorunTanimi);
                                    break;
                                }
                            }
                        }
                    }
                }
            };
        }
        private void LoadKontroller(int hareketID)
        {
            EntityQuery<ServisKontrol> qry = context.GetServisKontrolleriQuery().Where(x => x.HareketID == hareketID);
            LoadOperation<ServisKontrol> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisKontrol> op = ss as LoadOperation<ServisKontrol>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisKontrol> bilgi = op.Entities.ToList();
                    foreach (ServisKontrol kontrol in bilgi)
                    {
                        FindControlBySetValue(kontrol.KontrolID, kontrol.Deger);
                    }
                }
            };
        }

        private void btnAracAc_Click(object sender, RoutedEventArgs e)
        {
            if (SecilenArac != null)
            {
                BilgiEkrani frm = new BilgiEkrani();
                AracBilgi yeni = SecilenArac;
                frm.AracKodu = yeni.AracKodu;
                frm.FirmaAdi = yeni.FirmaAdi;
                frm.GrupAdi = yeni.GrupAdi;
                frm.Adres = yeni.Adres;
                frm.Show();
            }
        }

        private void txtArac_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                AracBul(txtArac.Text);
                txtMusteri.Focus();
            }
        }

        private void txtMusteri_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                txtMusteriTelefon.Focus();
            }
        }

        private void txtMusteriTelefon_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                dteGelisTarihi.Focus();
            }
        }

        private void dteGelisTarihi_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                tmrGelis.Focus();
            }
        }

        private void tmrGelis_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                dteGidisTarihi.Focus();
            }
        }

        private void dteGidisTarihi_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                tmrGidis.Focus();
            }
        }

        private void tmrGidis_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                dteBaslamaTarihi.Focus();
            }
        }

        private void dteBaslamaTarihi_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                tmrBaslama.Focus();
            }
        }

        private void tmrBaslama_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                dteBitisTarihi.Focus();
            }
        }

        private void tmrBitis_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                txtHizmetYeri.Focus();
            }
        }

        private void dteBitisTarihi_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                tmrBitis.Focus();
            }
        }

        private void txtHizmetYeri_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                cmbServis.Focus();
            }
        }

        private void cmbServis_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                tabControl1.SelectedIndex = 1;
                lstSorunlar.Focus();
            }
        }
    }
}

